<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>说一下对vuex的理解</title>
</head>
<body>
  1. Vuex是一个专为Vue.js应用开发的状态管理模式+库。它采用集中式存储，管理应用的所有组件的状态，并以相应的规则保证状态以一种可预测的方式发生变化。 
  
  2．我们期待以一种简单的“单向数据流“的方式管理应用，即状态->视图->操作单向循环的方式。
  但当我们的应用遇到多个组件共享状态时，比如：多个视图依赖于同一状态或者来自不同视图的行为需要变更同一状态。
  此时单向数据流的简洁性很容易被破坏。因此，我们有必要把组件的共享状态抽取出来，以一个全局单例模式管理。
  通过定义和隔离状态管理中的各种概念并通过强制规则维持视图和状态间的独立性，我们的代码将会变得更结构化且易维护。
  这是vuex存在的必要性，它和react生态中的redux之类是一个概念。 
  
  3. Vuex解决状态管理的同时引入了不少概念：
  例如state、mutation、action等，是否需要引入还需要根据当前应用的实际情况衡量一下：
  如果不打算开发大型单页应用，使用Vuex反而是繁琐冗余的，一个简单的store模式就足够了。
  但是，如果要构建一个中大型单页应用，Vuex基本上是标配。 

  4、vue很好，比redux好用多了，可是还是有些繁琐，当后来接触到多模块，子模块的时候，发生模块嵌套的时候，命名空间就比较难受，有些地方需要命名空间，有些地方又不需要，而且做配置的时候，也比较繁琐，对ts的支持也比较差

  action 和 mutation 的区别？
  action的功能和mutation是类似的，都是去变更store里的state，不过action和mutation有两点不同：
  action主要处理的是异步的操作，mutation必须同步执行，而action就不受这样的限制，也就是说action中我们既可以处理同步，也可以处理异步的操作

  一般我们是通过action改变状态，最后是通过提交mutation

  mutation
  this.$store.commit(“mutation函数名”，发送到mutation中的数据) 
  
  action
  this.$store.dispatch(‘action中的函数名’，发送到action中的数据)
</body>
</html>